package br.com.felix.dbm.sql.oracle;

import java.util.ArrayList;
import java.util.List;

import br.com.felix.dbm.database.DataType;
import br.com.felix.dbm.sql.DatabaseTypes;

/**
 * Enumerates Oracle's relational data types.
 * */
public class OracleDatabaseTypes implements DatabaseTypes {

	private final DataType nvarchar2 = new DataType("nvarchar2", 1);
	private final DataType integer = new DataType("integer", 0);
	private final DataType datatypeLong = new DataType("long", 0);
	
	@Override
	public List<DataType> getDatabaseTypes() {
		List<DataType> lst = new ArrayList<DataType>();
		lst.add(new DataType("char", 1));
		lst.add(new DataType("nchar", 1));
		lst.add(nvarchar2);
		lst.add(datatypeLong);
		lst.add(new DataType("raw", 0));
		lst.add(new DataType("long raw", 0));
		lst.add(new DataType("number", 2));
		lst.add(new DataType("numeric", 2));
		lst.add(new DataType("float", 0));
		lst.add(new DataType("dec", 2));
		lst.add(new DataType("decimal", 2));
		lst.add(integer);
		lst.add(new DataType("int", 0));
		lst.add(new DataType("smallint", 0));
		lst.add(new DataType("double precision", 0));
		lst.add(new DataType("date", 0));
		lst.add(new DataType("timestamp", 0));
		lst.add(new DataType("blob", 0));
		lst.add(new DataType("clob", 0));
		lst.add(new DataType("bfile", 0));
		lst.add(new DataType("nclob", 0));
		lst.add(new DataType("rowid", 0));
		lst.add(new DataType("urowid", 1));
		return lst;
	}


	@Override
	public DataType fromJavaClass(Class<?> c) {
		if(c.equals(String.class)){
			return nvarchar2;
		}
		else if(c.equals(Integer.class)){
			return integer;
		}
		else if(c.equals(Long.class)){
			return datatypeLong;
		}
		return null;
	}

}
